www.gusucode.com > VC++仿XP免费Prof UIS界面库-源码程序 > VC++仿XP免费Prof UIS界面库-源码程序/code/Samples/StatusPanes/ChildFormView.cpp
//Download by http://www.NewXing.com // ChildFormView.cpp : implementation file // #include "stdafx.h" #include "StatusPanes.h" #include "ChildFormView.h" #include "MainFrm.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CChildFormView IMPLEMENT_DYNCREATE(CChildFormView, CFormView) CChildFormView::CChildFormView() : CExtWS < CExtAFV < CFormView > > ( CChildFormView::IDD, ((CWnd *)NULL) ) ,m_pWndEdit(NULL) ,m_pWndSliderCtrl(NULL) ,m_pWndButton(NULL) ,m_pWndProgressCtrl(NULL) ,m_pWndAnimateCtrl(NULL) { //{{AFX_DATA_INIT(CChildFormView) m_nPosition = 1; m_nPaneType = 0; //}}AFX_DATA_INIT m_bInitComplete = false; m_pMainFrame = DYNAMIC_DOWNCAST(CMainFrame,AfxGetMainWnd()); } CChildFormView::~CChildFormView() { } void CChildFormView::DoDataExchange(CDataExchange* pDX) { CFormView::DoDataExchange(pDX); //{{AFX_DATA_MAP(CChildFormView) DDX_Control(pDX, IDC_DISABLE_PANE, m_btnDisablePane); DDX_Control(pDX, IDC_SPIN_POSITION, m_SpinPosition); DDX_Control(pDX, IDC_REMOVE_PANE, m_btnRemovePane); DDX_Control(pDX, IDC_ADD_PANE, m_btnAddPane); DDX_Control(pDX, IDC_HIDE_TEXT_ON_DISABLED_PANES, m_chkHideTextOnDisabledPanes); DDX_Control(pDX, IDC_OUTER_RECT_IN_FIRST_BAND, m_chkOuterRectInFirstBand); DDX_Control(pDX, IDC_DRAW_PANE_SEPARATORS, m_chkDrawPaneSeparators); DDX_Text(pDX, IDC_POSITION, m_nPosition); DDV_MinMaxInt(pDX, m_nPosition, 1, 20); DDX_Radio(pDX, IDC_RADIO_TYPE_TEXT, m_nPaneType); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CChildFormView, CFormView) //{{AFX_MSG_MAP(CChildFormView) ON_BN_CLICKED(IDC_DRAW_PANE_SEPARATORS, OnDrawPaneSeparators) ON_BN_CLICKED(IDC_OUTER_RECT_IN_FIRST_BAND, OnOuterRectInFirstBand) ON_BN_CLICKED(IDC_HIDE_TEXT_ON_DISABLED_PANES, OnHideTextOnDisabledPanes) ON_BN_CLICKED(IDC_ADD_PANE, OnAddPane) ON_BN_CLICKED(IDC_REMOVE_PANE, OnRemovePane) ON_BN_CLICKED(IDC_DISABLE_PANE, OnDisablePane) ON_BN_CLICKED(IDC_STATUS_BAR_BUTTON, OnStatusBarButton) ON_UPDATE_COMMAND_UI(ID_APP_ABOUT, OnUpdateAppAbout) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CChildFormView diagnostics #ifdef _DEBUG void CChildFormView::AssertValid() const { CFormView::AssertValid(); } void CChildFormView::Dump(CDumpContext& dc) const { CFormView::Dump(dc); } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CChildFormView message handlers BOOL CChildFormView::PreCreateWindow(CREATESTRUCT& cs) { if (!CFormView::PreCreateWindow(cs)) return FALSE; cs.dwExStyle &= ~(WS_EX_CLIENTEDGE|WS_EX_STATICEDGE); cs.style &= ~WS_BORDER; cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS, ::LoadCursor(NULL, IDC_ARROW), HBRUSH(COLOR_WINDOW+1), NULL); return TRUE; } ////////////////////////////////////////////////////////////////////////// void CChildFormView::OnInitialUpdate() { CFormView::OnInitialUpdate(); ShowSizeGrip(FALSE); m_SpinPosition.SetRange(1,20); m_chkHideTextOnDisabledPanes.SetCheck(0); OnHideTextOnDisabledPanes(); m_bInitComplete = true; } ////////////////////////////////////////////////////////////////////////// void CChildFormView::OnDrawPaneSeparators() { if( m_chkDrawPaneSeparators.GetCheck() == 1 ){ m_pMainFrame->m_wndStatusBar.DrawPaneSeparatorsSet(true); m_chkOuterRectInFirstBand.EnableWindow(0); } else{ m_pMainFrame->m_wndStatusBar.DrawPaneSeparatorsSet(false); m_chkOuterRectInFirstBand.EnableWindow(1); } if( m_pWndButton && ::IsWindow(m_pWndButton->m_hWnd)){ if(m_chkDrawPaneSeparators.GetCheck() == 1){ m_pWndButton->SetDrawBorder(1); } else{ m_pWndButton->SetDrawBorder(0); } } } void CChildFormView::OnOuterRectInFirstBand() { m_pMainFrame->m_wndStatusBar.OuterRectInFirstBandSet( m_chkOuterRectInFirstBand.GetCheck() == 1 ); } void CChildFormView::OnHideTextOnDisabledPanes() { m_pMainFrame->m_wndStatusBar.HideTextOnDisabledPanesSet( m_chkHideTextOnDisabledPanes.GetCheck() == 1 ); } ////////////////////////////////////////////////////////////////////////// void CChildFormView::OnAddPane() { UpdateData(); if( m_nPosition < 1 || m_nPosition > 20 ) return; switch( m_nPaneType ) { case 0: // text { bool bRet = m_pMainFrame->m_wndStatusBar.AddPane(IDS_PANE_TEXT,m_nPosition); if(!bRet){ AfxMessageBox(_T("Pane index out of range\nor pane with same ID already exists in the status bar"), MB_ICONERROR); return; } } break; case 1: // edit { m_pWndEdit = new CExtStatusBarEdit; if (!m_pWndEdit->Create( WS_CHILD|WS_VISIBLE|WS_TABSTOP, CRect(0,0,0,0), &m_pMainFrame->m_wndStatusBar, 0)) { TRACE(_T("Failed to create edit control.\n")); return; } m_pWndEdit->SetFont( CFont::FromHandle( (HFONT)::GetStockObject(DEFAULT_GUI_FONT) ) ); m_pWndEdit->SetWindowText(_T("Type text here...")); bool bRet = m_pMainFrame->m_wndStatusBar.AddPane(IDS_PANE_EDIT,m_nPosition); if(!bRet){ AfxMessageBox(_T("Pane index out of range\nor pane with same ID already exists in the status bar"), MB_ICONERROR); return; } int nIndex = m_pMainFrame->m_wndStatusBar.CommandToIndex(IDS_PANE_EDIT); if (nIndex == -1) return; m_pMainFrame->m_wndStatusBar.SetPaneWidth(nIndex, 100); m_pMainFrame->m_wndStatusBar.AddPaneControl(m_pWndEdit, IDS_PANE_EDIT, true); } break; case 2: // progress ctrl { m_pWndProgressCtrl = new CExtStatusBarProgressCtrl; if (!m_pWndProgressCtrl->Create( WS_CHILD|WS_VISIBLE|WS_TABSTOP, //|PBS_SMOOTH CRect(0,0,0,0), &m_pMainFrame->m_wndStatusBar, 0)) { TRACE(_T("Failed to create progress control.\n")); return; } m_pWndProgressCtrl->ModifyStyleEx(WS_EX_STATICEDGE,0,SWP_FRAMECHANGED); m_pWndProgressCtrl->SetRange(0,300); m_pWndProgressCtrl->SetPos(0); m_pWndProgressCtrl->SetStep(1); bool bRet = m_pMainFrame->m_wndStatusBar.AddPane(IDS_PANE_PROGRESS,m_nPosition); if(!bRet){ AfxMessageBox(_T("Pane index out of range\nor pane with same ID already exists in the status bar"), MB_ICONERROR); return; } int nIndex = m_pMainFrame->m_wndStatusBar.CommandToIndex(IDS_PANE_PROGRESS); if (nIndex == -1) return; m_pMainFrame->m_wndStatusBar.SetPaneWidth(nIndex, 100); m_pMainFrame->m_wndStatusBar.AddPaneControl(m_pWndProgressCtrl, IDS_PANE_PROGRESS, true); m_pWndProgressCtrl->SetTimer(0,1,NULL); } break; case 3: // slider ctrl { m_pWndSliderCtrl = new CExtStatusBarSliderCtrl; if (!m_pWndSliderCtrl->Create( WS_CHILD|WS_VISIBLE|WS_TABSTOP|TBS_HORZ, CRect(0,0,0,0), &m_pMainFrame->m_wndStatusBar, 0)) { TRACE(_T("Failed to create slider control.\n")); return; } bool bRet = m_pMainFrame->m_wndStatusBar.AddPane(IDS_PANE_SLIDER_CTRL,m_nPosition); if(!bRet){ AfxMessageBox(_T("Pane index out of range\nor pane with same ID already exists in the status bar"), MB_ICONERROR); return; } int nIndex = m_pMainFrame->m_wndStatusBar.CommandToIndex(IDS_PANE_SLIDER_CTRL); if (nIndex == -1) return; m_pMainFrame->m_wndStatusBar.SetPaneWidth(nIndex, 80); m_pMainFrame->m_wndStatusBar.AddPaneControl(m_pWndSliderCtrl, IDS_PANE_SLIDER_CTRL, true); } break; case 4: // button { m_pWndButton = new CExtStatusBarButton; if (!m_pWndButton->Create( _T("Button"), WS_CHILD|WS_VISIBLE|WS_TABSTOP, CRect(0,0,0,0), &m_pMainFrame->m_wndStatusBar, IDC_STATUS_BAR_BUTTON)) { TRACE(_T("Failed to create button control.\n")); return; } m_pWndButton->SetFlat(); m_pWndButton->SetDrawBorder( m_chkDrawPaneSeparators.GetCheck()==1 ); bool bRet = m_pMainFrame->m_wndStatusBar.AddPane(IDS_PANE_BUTTON,m_nPosition); if(!bRet){ AfxMessageBox(_T("Pane index out of range\nor pane with same ID already exists in the status bar"), MB_ICONERROR); return; } int nIndex = m_pMainFrame->m_wndStatusBar.CommandToIndex(IDS_PANE_BUTTON); if (nIndex == -1) return; m_pMainFrame->m_wndStatusBar.SetPaneWidth(nIndex, 50); m_pMainFrame->m_wndStatusBar.AddPaneControl(m_pWndButton, IDS_PANE_BUTTON, true); } break; case 5: // animate ctrl { m_pWndAnimateCtrl = new CExtStatusBarAnimateCtrl; if (!m_pWndAnimateCtrl->Create( WS_CHILD|WS_VISIBLE|WS_TABSTOP|ACS_CENTER|ACS_AUTOPLAY|ACS_TRANSPARENT, CRect(0,0,0,0), &m_pMainFrame->m_wndStatusBar, 0)) { TRACE(_T("Failed to create animate control.\n")); return; } m_pWndAnimateCtrl->Open(IDR_DOWNLOAD); bool bRet = m_pMainFrame->m_wndStatusBar.AddPane(IDS_PANE_ANIMATE,m_nPosition); if(!bRet){ AfxMessageBox(_T("Pane index out of range\nor pane with same ID already exists in the status bar"), MB_ICONERROR); return; } int nIndex = m_pMainFrame->m_wndStatusBar.CommandToIndex(IDS_PANE_ANIMATE); if (nIndex == -1) return; m_pMainFrame->m_wndStatusBar.SetPaneWidth(nIndex, 16); m_pMainFrame->m_wndStatusBar.AddPaneControl(m_pWndAnimateCtrl, IDS_PANE_ANIMATE, true); } break; case 6: // label { m_pWndLabel = new CExtStatusBarLabel; if (!m_pWndLabel->Create( _T("Prof-UIS"), WS_CHILD|WS_VISIBLE|WS_TABSTOP|SS_CENTER, CRect(0,0,0,0), &m_pMainFrame->m_wndStatusBar, 0)) { TRACE(_T("Failed to create label control.\n")); return; } m_pWndLabel->SetFont( CFont::FromHandle( (HFONT)::GetStockObject(DEFAULT_GUI_FONT) ) ); bool bRet = m_pMainFrame->m_wndStatusBar.AddPane(IDS_PANE_LABEL,m_nPosition); if(!bRet){ AfxMessageBox(_T("Pane index out of range\nor pane with same ID already exists in the status bar"), MB_ICONERROR); return; } int nIndex = m_pMainFrame->m_wndStatusBar.CommandToIndex(IDS_PANE_LABEL); if (nIndex == -1) return; m_pMainFrame->m_wndStatusBar.SetPaneWidth(nIndex, 70); m_pMainFrame->m_wndStatusBar.AddPaneControl(m_pWndLabel, IDS_PANE_LABEL, true); } break; } } ////////////////////////////////////////////////////////////////////////// void CChildFormView::OnRemovePane() { UpdateData(); if( m_nPosition < 1 || m_nPosition > 20 ) return; if(!m_pMainFrame->m_wndStatusBar.RemovePane( m_pMainFrame->m_wndStatusBar.GetItemID(m_nPosition)) ) { CString s; s.Format(_T("Pane %d was not found in the status bar \nor must be at least one of them."), m_nPosition); AfxMessageBox(s, MB_ICONERROR); } } ////////////////////////////////////////////////////////////////////////// void CChildFormView::OnStatusBarButton() { AfxMessageBox(_T("StatusBar Button Clicked.")); } ////////////////////////////////////////////////////////////////////////// void CChildFormView::OnDisablePane() { UpdateData(); if( m_nPosition < 1 || m_nPosition > 20 ) return; UINT nID, nStyle; int cxWidth; m_pMainFrame->m_wndStatusBar.GetPaneInfo(m_nPosition, nID, nStyle, cxWidth); bool bDisabled = ((nStyle&SBPS_DISABLED) == 0); m_pMainFrame->m_wndStatusBar.SetPaneStyle( m_nPosition, //nID, bDisabled ? nStyle | SBPS_DISABLED : nStyle & ~SBPS_DISABLED //`cxWidth ); } ////////////////////////////////////////////////////////////////////////// void CChildFormView::CheckControls() { if(!m_bInitComplete) return; UpdateData(); if( m_nPosition < 1 ){ m_nPosition = 1; UpdateData(0); return; } if( m_nPosition > 20 ){ m_nPosition = 20; UpdateData(0); return; } int nCount = m_pMainFrame->m_wndStatusBar.GetPaneCount(); if( m_nPosition >= nCount ) { m_btnDisablePane.EnableWindow(FALSE); m_btnRemovePane.EnableWindow(FALSE); if( m_nPosition != nCount ){ m_btnAddPane.EnableWindow(FALSE); return; } } else { m_btnDisablePane.EnableWindow(TRUE); m_btnRemovePane.EnableWindow(TRUE); } bool bFinded = false; int i=0; switch(m_nPaneType) { case 0: for(i=0; i<m_pMainFrame->m_wndStatusBar.GetPaneCount(); i++) if( IDS_PANE_TEXT == m_pMainFrame->m_wndStatusBar.GetItemID(i) ){ bFinded = true; break; } break; case 1: for(i=0; i<m_pMainFrame->m_wndStatusBar.GetPaneCount(); i++) if( IDS_PANE_EDIT == m_pMainFrame->m_wndStatusBar.GetItemID(i) ){ bFinded = true; break; } break; case 2: for(i=0; i<m_pMainFrame->m_wndStatusBar.GetPaneCount(); i++) if( IDS_PANE_PROGRESS == m_pMainFrame->m_wndStatusBar.GetItemID(i) ){ bFinded = true; break; } break; case 3: for(i=0; i<m_pMainFrame->m_wndStatusBar.GetPaneCount(); i++) if( IDS_PANE_SLIDER_CTRL == m_pMainFrame->m_wndStatusBar.GetItemID(i) ){ bFinded = true; break; } break; case 4: for(i=0; i<m_pMainFrame->m_wndStatusBar.GetPaneCount(); i++) if( IDS_PANE_BUTTON == m_pMainFrame->m_wndStatusBar.GetItemID(i) ){ bFinded = true; break; } break; case 5: for(i=0; i<m_pMainFrame->m_wndStatusBar.GetPaneCount(); i++) if( IDS_PANE_ANIMATE == m_pMainFrame->m_wndStatusBar.GetItemID(i) ){ bFinded = true; break; } break; case 6: for(i=0; i<m_pMainFrame->m_wndStatusBar.GetPaneCount(); i++) if( IDS_PANE_LABEL == m_pMainFrame->m_wndStatusBar.GetItemID(i) ){ bFinded = true; break; } break; } m_btnAddPane.EnableWindow( !bFinded ); } ////////////////////////////////////////////////////////////////////////// void CChildFormView::OnUpdateAppAbout(CCmdUI* pCmdUI) { pCmdUI; CheckControls(); }